import router from './router'
import store from './store'
import { getToken, getNav, setNav } from '@/utils/auth'
// import { Message } from 'element-ui'
import NProgress from 'nprogress' // Progress 进度条
import 'nprogress/nprogress.css' // Progress 进度条样式

// 不重定向白名单
const whiteList = ['login', 'homePage', 'companyIntroduction', 'entradelogin', 'autologin', 'editorpreview_id', 'apprelease_id', 'recallrelease_id', 'rejectedrelease_id', 'draftsapprelease_id']

router.beforeEach(async (to, from, next) => {
  NProgress.start()

  // 1.每次进行路由跳转都要从本地 cookie 中取 Token (有则说明用户登录过)
  const hasToken = getToken() === null || getToken() === undefined || getToken() === 'undefined' ? '' : getToken()
  // console.log('router token:%o \r\n       from:%o to:%o', hasToken, from, to)

  if (hasToken) {
    if (to.path === '/login') {
      // 5.如果已登录（但不一定有角色权限相关信息）
      next({ path: '/' })
      NProgress.done()
    } else {
      // 6.需要先从本地 store 中取用户信息
      const userid = store.getters.userid
      console.log('userid:[%o]', userid)
      if (userid) {
        // 8.用户有相关信息，可以正常访问系统(一般都是刷新页面时走到这里)
        next()
      } else {
        try {
          // 页面登录逻辑实现：
          // src\views\login\index.vue handleLogin()
          // src\store\modules\user.js LoginByUsername

          // 7.取用户相关信息
          // (实现：src\store\modules\user.js   src\api\login.js)
          let res = await store.dispatch('GetUserInfo')
          console.log('GetUserInfo:', res)
          // 提取部门id
          let orgid = res.data.data.org_id
          if (res.data.data.userOrgSwitchingInfos && res.data.data.userOrgSwitchingInfos.length > 0) {
            orgid = res.data.data.userOrgSwitchingInfos[0].orgId
          }
          // 部门id存储到 cookie 中
          setNav('orgswitchingid', orgid)
          // 取系统菜单合集
          // (实现：src\store\modules\antv.js   src\api\antv\index.js)
          res = await store.dispatch('GetUserSubsys')
          console.log('GetUserSubsys:', res)

          // 默认设定第一个子系统菜单
          let subSysName = res.data[0].subsys_id
          if (getNav('navVal')) {
            subSysName = getNav('navVal')
          } else if (getNav('dropNum')) {
            subSysName = getNav('dropVal')
          } else {
            subSysName = res.data[0].subsys_id
          }
          if (getNav('navNum')) {
            // (实现：src\store\modules\permission.js)
            await store.dispatch('ChangeActiveMenuIndex', parseInt(getNav('navNum')))
          }
          if (getNav('dropNum')) {
            await store.dispatch('ChangeActiveMenuIndex', 'null')
          }

          let language = '1'
          if (localStorage.getItem('language') === 'zh-CN') {
            language = '0'
          }
          let queryArgs = {
            subSysName: subSysName,
            orgswitchingid: orgid,
            language: language
          }
          console.log('queryArgs:', queryArgs)
          // 生成可访问的路由表(实现：src\store\modules\permission.js)
          await store.dispatch('GenerateRoutes', queryArgs)
          // 动态添加可访问路由表
          router.addRoutes(store.getters.addRouters)
          console.log('addRouters:', store.getters.addRouters)
          // (实现：src\store\modules\permission.js)
          await store.dispatch('ChangeMenuLoading', false)

          next({ ...to, replace: true })
        } catch (error) {
          console.log('登录错误:', error)
        }
      }
    }
  } else {
    // 2.没有 token 则表示用户没有登录，或存储 cookie 中的 token 已经失效
    if (whiteList.includes(to.name)) {
      console.log('请求白名单', to.path)
      // 4.如果用户所访问的页面在白名单中可免登录直接进入
      next()
    } else {
      /*
      try {
        var sendData = {
          function: 'logout'
        }
        cmxSendMsg(sendData)
      } catch (e) {
      }
      */
      // 3.既没有 token 又不在白名单中，则将被重定向到登录页面
      next({ path: '/login/homePage' })
      NProgress.done()
    }
  }
})

router.afterEach(() => {
  NProgress.done()
})
